package com.kurt.repository;

import com.kurt.entity.SysDictData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 数据字典数据Repository接口
 * 提供数据字典数据访问方法
 */
@Repository
public interface SysDictDataRepository extends JpaRepository<SysDictData, Long>, JpaSpecificationExecutor<SysDictData> {

    /**
     * 根据字典类型ID查找字典数据
     *
     * @param dictTypeId 字典类型ID
     * @return 字典数据列表
     */
    List<SysDictData> findByDictTypeId(Long dictTypeId);

    /**
     * 根据字典类型ID和状态查找字典数据
     *
     * @param dictTypeId 字典类型ID
     * @param status     状态
     * @return 字典数据列表
     */
    List<SysDictData> findByDictTypeIdAndStatus(Long dictTypeId, Integer status);

    /**
     * 根据字典类型ID查找字典数据（按排序字段排序）
     *
     * @param dictTypeId 字典类型ID
     * @return 字典数据列表
     */
    List<SysDictData> findByDictTypeIdOrderByDictSort(Long dictTypeId);

    /**
     * 根据字典类型ID和状态查找字典数据（按排序字段排序）
     *
     * @param dictTypeId 字典类型ID
     * @param status     状态
     * @return 字典数据列表
     */
    List<SysDictData> findByDictTypeIdAndStatusOrderByDictSort(Long dictTypeId, Integer status);

    /**
     * 根据字典标签模糊查询
     *
     * @param dictLabel 字典标签
     * @return 字典数据列表
     */
    List<SysDictData> findByDictLabelContaining(String dictLabel);

    /**
     * 根据字典值查找字典数据
     *
     * @param dictValue 字典值
     * @return 字典数据列表
     */
    List<SysDictData> findByDictValue(String dictValue);

    /**
     * 根据字典类型ID和字典值查找字典数据
     *
     * @param dictTypeId 字典类型ID
     * @param dictValue  字典值
     * @return 字典数据
     */
    Optional<SysDictData> findByDictTypeIdAndDictValue(Long dictTypeId, String dictValue);

    /**
     * 根据状态查找字典数据
     *
     * @param status 状态
     * @return 字典数据列表
     */
    List<SysDictData> findByStatus(Integer status);

    /**
     * 根据字典类型ID删除字典数据
     *
     * @param dictTypeId 字典类型ID
     */
    void deleteByDictTypeId(Long dictTypeId);

}
